package com.qf.controller;

import com.qf.dao.ProductDao;
import com.qf.pojo.Cart;
import com.qf.pojo.CartItem;
import com.qf.pojo.Product;
import com.qf.pojo.User;
import com.qf.service.ProductService;
import com.qf.service.impl.ProductServiceImpl;

import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;

/**
 * 购物车的后端接口地址
 */
@WebServlet("/cart")
public class CartServlet extends BaseServlet {

    //定义方法(无论加入购物车/删除购物车项/清空购物车,都的获取购物车):从HttpSession取出购物车
    public Cart getCart(HttpServletRequest request,HttpServletResponse response){
        //从请求对象中获取HttpSession
        HttpSession session = request.getSession();
        //从session中取 "cart"属性的对应的内容
         Cart cart = (Cart) session.getAttribute("cart");

         //如果cart是null,HttpSession第一次没有购物车
        if(cart == null){
            cart = new Cart() ;
            //将cart存储在HttpSession中
            session.setAttribute("cart",cart);//钝化 给磁盘上的文件.ser文件

            //HttpSession依赖于Cookie,存储HttpSession的标识ID
            //创建Cookie ---"JSESSIONID","id标识"
            Cookie cookie = new Cookie("JSESSIONID",session.getId()) ;
            //设置有效期
            cookie.setMaxAge(60*60*24*7) ;
            response.addCookie(cookie) ;

            //System.out.println("购物车中的session的ID标识是:"+session.getId());
        }
        return cart ;
    }



    /**
     * 加入购物车
     * @param request 请求
     * @param response 响应
     */
    public void addCart(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {

        //从request对象中获取HttpSession
        HttpSession session = request.getSession();
        User user = (User) session.getAttribute("user");
        if(user==null){
            //请求转发到登录页面
            request.getRequestDispatcher("/jsp/login.jsp").forward(request,response);
            return;
        }

        //将购物车项添加到购物车----->需要有个购物车项目CartItem(商品Product,count,subTotal)
        //接收隐藏域的参数pid
        String pid = request.getParameter("pid");
        //System.out.println("加入购物车的商品id:"+pid) ;
        //接收商品数量
        String count = request.getParameter("count");
        int cnt =  Integer.parseInt(count) ;
        //调用商品的业务接口 通过pid获取商品
        ProductService productService = new ProductServiceImpl() ;
        Product product = productService.getProductByPid(pid);
        //封装购物车项
        CartItem cartItem = new CartItem() ;
        //System.out.println(cartItem);
        cartItem.setProduct(product) ;
        cartItem.setCount(cnt) ;

        //获取购物车
        Cart cart = getCart(request,response);
        //调用购物车里面的方法(从session中取):将购物车项添加购物车
        cart.cartItem2Cart(cartItem) ;

        //重定向到/jsp/cart.jsp---页面中通过HttpSession中存储的购物车,取出购物车信息
        response.sendRedirect(request.getContextPath()+"/jsp/cart.jsp");

    }

    /**
     * 点击删除--完成删除购物车项
     * @param request
     * @param response
     */
    public void delCartItem(HttpServletRequest request,HttpServletResponse response) throws IOException {
        //window.location.href="${pageContext.request.contextPath}/cart?methodName=delCartItem&pid="+pid;
        //获取参数
        String pid = request.getParameter("pid");

        //获取购物车,调用购物车的删除购物车项的方法
        Cart cart = getCart(request,response) ;
        cart.removeCartItemFromCart(pid) ;

        //重定向到购物车页面
        response.sendRedirect(request.getContextPath()+"/jsp/cart.jsp");
    }


    /**
     * 清空购物车的后端方法
     * @param request  请求
     * @param response 响应
     */
    public void clearCart(HttpServletRequest request,HttpServletResponse response) throws IOException {
            //获取购物车
        Cart cart = getCart(request,response);
        //调用清空购物车的方法
        cart.clearCart();

        //将HttpSession存储的购物车删除
        request.getSession().removeAttribute("cart") ;



        //重定向购物车页面
        response.sendRedirect(request.getContextPath()+"/jsp/cart.jsp");
    }


}
